package VacationHomework.LeetCode;

import java.util.HashMap;
import java.util.Map;

public class Num1171 {
    public ListNode removeZeroSumSublists(ListNode head) {
//        ListNode dummyHead=new ListNode(0);
//        dummyHead.next=head;
//        ListNode p=head;
//        Map<Integer,ListNode> map=new HashMap<>();
//        int sum=0;
//        map.put(0,dummyHead);
        //一直要维护map中的数据
//        while (p!=null){
//            sum+=p.val;
//            if(map.containsKey(sum)){//map中已经存在了sum，说明已经存在的sum之后到p结点都要删除
//                ListNode node=map.get(sum);
//                ListNode del=node.next;
//                node.next=p.next;//在链表中删除了结点
//
//                int sum1=sum;//将sum对应的结点之后的结点到p结点之间的sum和在map中删除
//
//                while (del!=p){
//                    sum1+=del.val;
//                    map.remove(sum1);
//                    del=del.next;
//                }
//            }else {
//                map.put(sum, p);
//            }
//            p=p.next;
//        }
//        return dummyHead.next;


    ListNode dummyHead=new ListNode(0);
    dummyHead.next=head;
    ListNode p=dummyHead;
    Map<Integer,ListNode> map=new HashMap<>();
    int sum=0;
        while(p!=null){
            sum+=p.val;
            map.put(sum,p);
            p=p.next;
        }
        sum=0;
        p=dummyHead;
        while (p!=null){
            sum+=p.val;
            p.next=map.get(sum).next;
            p=p.next;
        }
        return dummyHead.next;
    }
}
